package top.lingkang.finalsession.core;

import top.lingkang.finalsession.FinalSessionConfig;
import top.lingkang.finalsession.javax.MemoryFinalRepository;
import top.lingkang.finalsession.utils.SerializationUtils;


/**
 * @author lingkang
 * Created by 2022/1/
 * 会话存储接口，默认实现类 {@link MemoryFinalRepository}、
 * {@link top.lingkang.finalsession.jakarta.MemoryFinalRepositoryJakarta}、
 * {@link top.lingkang.finalsession.solon.MemoryFinalRepositorySolon}
 * 可通过实现改类达到存储会话到数据库、redis、或其他存储方式，可使用{@link SerializationUtils} 对session进行序列化
 */
public interface FinalRepository<T> {

    /**
     * 初始化配置时，会调用一次此接口，用于初始化配置
     *
     * @param config {@link top.lingkang.finalsession.FinalSessionConfig}
     */
    void initConfig(FinalSessionConfig config);

    T getSession(String id);

    /**
     * 设置会话
     *
     * @param id      会话id
     * @param session 会话
     */
    void setSession(String id, T session);

    /**
     * 删除会话
     *
     * @param id 会话id
     */
    void deleteSession(String id);

    void destroy();
}
